<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<!-- DW6 -->
<head>
<!-- Copyright 2005 Macromedia, Inc. All rights reserved. -->
<title>Text</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="mm_health_nutr.css" type="text/css">
<script language="javascript">
//--------------- LOCALIZEABLE GLOBALS ---------------
var d=new Date();
var monthname=new Array("January","February","March","April","May","June","July","August","September","October","November","December");
//Ensure correct for language. English is "January 1, 2004"
var TODAY = monthname[d.getMonth()] + " " + d.getDate() + ", " + d.getFullYear();
//---------------   END LOCALIZEABLE   ---------------
</script>
</head>
<body bgcolor="#F4FFE4">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr bgcolor="#D5EDB3">
    <td colspan="2" rowspan="2">&nbsp;</td>
    <td width="494" height="50" id="logo" valign="bottom" align="center" nowrap>Arquitectura</td>
    <td width="119">&nbsp;</td>
  </tr>

  <tr bgcolor="#D5EDB3">
    <td height="19" id="tagline" valign="top" align="center">Grupo 15</td>
	<td width="119">&nbsp;</td>
  </tr>

  <tr>
    <td colspan="4" bgcolor="#5C743D"><img src="mm_spacer.gif" alt="" width="1" height="2" border="0"></td>
  </tr>

  <tr>
    <td colspan="4" bgcolor="#99CC66" background="mm_dashed_line.gif"><img src="mm_dashed_line.gif" alt="line decor" width="4" height="3" border="0"></td>
  </tr>

  <tr bgcolor="#99CC66">
  <td>&nbsp;</td>
  	<td colspan="3" id="dateformat" height="20"><a href="index.html">INDICE</a>&nbsp;&nbsp;::&nbsp;&nbsp;<script language="javascript">
      document.write(TODAY);	</script>	</td>
  </tr>

  <tr>
    <td colspan="4" bgcolor="#99CC66" background="mm_dashed_line.gif"><img src="mm_dashed_line.gif" alt="line decor" width="4" height="3" border="0"></td>
  </tr>

  <tr>
    <td colspan="4" bgcolor="#5C743D"><img src="mm_spacer.gif" alt="" width="1" height="2" border="0"></td>
  </tr>
 <tr>
    <td width="40">&nbsp;</td>
    <td colspan="2" valign="top">&nbsp;<br>
    &nbsp;<br>
    <table border="0" cellspacing="0" cellpadding="2" width="790">
        <tr>
          <td width="786" class="pageName">Introducción</td>
        </tr>
        <tr>
          <td class="bodyText"><p>En esta pagina se van a detallar los detalles internos de la apliacion, que paquetes se encuentran porque esa clasificacion y demas entresijos de la arquitectura de la practica.</p>
          <p>Indice de contenidos:</p>
          <p><a href="arquitectura.html#descripcion">1. Descripcion general</a></p>
          <p><a href="arquitectura.html#fuentes">2. Descripcion del paquete src</a></p>
          <p><a href="arquitectura.html#pintado">2. Descripcion del pintado</a></p><br>
          </td>
		</tr>
        <tr>
          <td class="pageName"><a name="descripcion">Descripcion general</a></td>
        </tr>
        <tr>
          <td class="bodyText">
            <p>En este apartado de muestra la organizacion de nuestra arquitectura. Con la siguiente imagen pretendemos dar una vision global que será ampliada con los comentarios que la sucedan.</p>
          <p><center><img src="arquitectura-base.png" alt="Base de la arquitectura" width="192" height="232"></center></p>
          <p>Como se puede apreciar a aprte del directorio de fuentes, tenemos diversas carpetas que nos ayudan a mantener una aplicacion limpia y ordenada.</p>
          <ul>
            <li>Conf: Esta carpeta contiene los diferentes archivos de configuracion necesarios. <em>Juegos.conf</em> que le asigna a cada juego una id, <em>Configuracion.conf</em> en este archivo podemos encontrar diversos parametros de configuracion principalmente para la generacion del universo, pero tambien por ejemplo la ruta del fichero de nombres de planetas y el delay que se quiere para la animacion del recorrido. Por ultimo en esta misma carpeta hemos guardado la base de datos de los nombres.</li>
            <li>Doc: Esta carpeta tiene los archivos generados con javadoc para un mayor entendimiento de las clases que forman la aplicacion.</li>
            <li>lib: Diversas librerias necesarias para la ejecucion de la aplicacion:
              <ul>
                <li><a href="http://code.google.com/p/aima-java/">aima-java.jar</a> es la libreria que nos facilita la labor de recorridos y busquedas.</li>
                <li>appframework-1.0.3.jar, swing-layout-1.0.3.jar, swing-worker-1.1.jar son propias de las aplicaciones de escritorio.</li>
                </ul>
            </li>
            <li>logs: En cada ejecucion de la busqueda se genera un archivo por tipo de busqeuda a realizar con la informacion de recorrido y ciertos valores para medir y comparar distintas opciones de busqueda.<br>
            A parte en cada ejecucion se crea un fichero global de log en el que se recoge toda la informacion de la ejecucion tanto de la busqueda del universo, como de los juegos como de los posibles mensajes de error que hayan podido aparecer.</li>
            <li>universos: Por defecto aqui es donde se  guardan los ficheros que modelan el universo que se va a explorar con la aplicacion.</li>
            <li>src: Obviamente contiene el codigo fuente de la aplicacion.</li>
            </ul>
          <br></td>
        </tr>
                <tr>
          <td class="pageName"><a name="fuentes">Descripcion del paquete src</a></td>
        </tr>
        <tr>
          <td class="bodyText"><p>Como venimos haciendo para facilitar la compresion de esta memoria vamos a empezar mostrando una imagen con su apariencia para posteriormente proceder a describir cada apartado mas detalladamente.</p>
          <p><center><img src="arquitectura-src.png" alt="Descripcion del paquete src" width="221" height="832"></center></p>
          <p>Descripcion detallada por paquetes:</p>
          <ul>
            <li>contector: Contiene el conector y el generador de universos. Estados clases son las encargadas de salvar la informacion de universos y de cargar informacion de universos.
              <ul>
                <li>Util: Paquete con utilidades
                  <ul>
                    <li>Excepciones: Paquete que contiene las excepciones atribuidas al conector y al generador de universos.</li>
                    </ul>
                </li>
                </ul>
            </li>
            <li>GUI: En paquete se encuentran todas las clases necesarias para la visualizacion de la aplicacion. Ademas contiene el metodo main que ejecuta la aplicacion. Para el desarrollo de la interfaz de usuario nos hemos ayudado de NetBeans asi que en este paquete hay ciertos ficheros generados automaticamente por dicho entorno de programacion.
              <ul>
                <li>dibujos: diversas clases para el dibujado de la animacion. No son de nuestra autoria aunque las hemos modificado a nuestro antojo a fin de ajustarlas 100% a nuestras necesidades. <br>
                Pagina de la libreria: <a href="http://www.ctr.unican.es/Fundamentos/">fundamentos</a></li>
                </ul>
            </li>
            <li><name id="juegos">juegos</name>: En este paquete se encuentran todos los juegos de los que dispone la aplicacion:<br>
              <a href="juegos/blancasnegras.html">Blancas y Negras</a><br>
              <a href="juegos/bloques.html">Bloques</a><br>
              <a href="juegos/cajascolores.html">Cajas de colores</a><br>
              <a href="juegos/misioneros_y_canibales.html">Misioneros y canibales</a><br>
              <a href="juegos/garrafas.html">Garrafas de 3 y 4 litros</a><br>
              <a href="juegos/LCC.html">Lobo, cabra y col</a><br>
              <a href="juegos/mono.html">El juego del mono</a><br>
              <a href="juegos/palillos.html">El juego de los palillos</a><br>
              <a href="juegos/pollos.html">El juego de los Pollos</a><br>
              <a href="juegos/puzzle.html">8-Puzzle</a><br>
              <a href="juegos/reinas.html">N-Reinas</a><br>
            <a href="juegos/robot.html">El juego del Robot</a></li>
            <br>
            Hemos procurado utilizar variedad de busqeudas en los juegos
            y ademas utilizar alguna busqueda que no siempre tenga resultado para que no siempre podamos avanzar por el enlace donde este el juego, asi obligamos a la busqueda de alternativas en caso de encontrar determinados juegos.
            <ul>
                <li>Juegos.java es la interfaz que todos los juegos deben implementar, sobretodo el metodo ejecutar que es el que nos devolverá el resultado de la ejecucion de un juego.</li>
                </ul>
            </li>
            <li>Universo: Este paquete contiene otro juego pero este es a nivel global.
              Tambien contiene la calse GestorConexion que es el que maneja el cargado de ficheros de universos y los deja publicos, como atributo estatico) para que toda la aplicacion tenga acceso a ellos. Esta clase sigue el patron singleton para que solo haya una instancia del universo en toda la ejecucion de la aplicacion.
              <ul>
                <li>Util este paquete tiene las clases que modelan el universo asi como otras que realizan diversas tareas, depurar (UniversoLogger.java) y pintar(UniversoMovie.java) entre otras.
                  <ul>
                    <li>factoria: Este paquete contiene las clases de nuestra factoria de juegos, estas clases son utilizadas por el enlace para devolver un objeto que implemente la interfaz juego.java<br>
                      Estas dos clases utilizan patrones singleton y factoria.</li>
                  </ul>
                </li>
              </ul>
            </li>
          </ul>
          <p>El diseño de la arquitectura nos facilita extender el problema a mas juegos, mas tipos de busquedas y universos de diversos tamaños.</p>
          <p>Añadir un juego mas seria tan simple como introducirlo en el paquete juegos e implementando la interfaz juego.java una vez hecho esto se añade el juego al fichero de configuraciones, a la factoria y en el generador de universos para que añada aleatoriamente tambien ese juego.</p>
          <p>Del mismo modo añadir otra busqueda seria tan facil como implementar las interfaces que nos facilita AIMA e introducirlas en los problemas como busquedas.</p>
          <p><br>
          </p></td>
        </tr>
        <tr>
          <td class="pageName"><a name="pintado">Descripcion del pintado</a></td>
        </tr>
        <tr>
          <td class="bodyText">
            <p>La reconstruccion del camino elegido por la busqueda lo realiza la clase UniversoMovie.java que, trabajando en estrecha relaccion con la libreria fundamentos, dibuja el camino seguido como si fuera una "pelicula". Esta clase recibe como parametro las acciones llevadas a cabo por la busqueda y las representa siguiendo el siguiente esquema de colores: </p>
            <ul>
              <li>Nodo en rojo: Este nodo es el actual en el que nos encontramos y en nuestra representacion siempre va a ocupar el puesto de la raiz.</li>
              <li>Nodo en verde: En este caso con el verde representamos el nodo sucesor que vamos a explorar a continuacion.</li>
              <li>Nodo en naranja: Es el nodo destino que ha sido alcanzado.</li>
              <li>El resto de nodos que aparecen en blanco son nodos que han sido expandidos pero no explorados.</li>
            </ul>
            <p>Cada nodo tiene asociada una información:</p>
            <ul>
              <li>El id que lo representa, que se dibuja en el centro del circulo.</li>
              <li>El juego que hay que superar para llegar a el (en caso de que exista un juego que superar en ese enlace).</li>
              <li>El coste en distancia de ir de un nodo a otro.</li>
            </ul>
          <p>Hemos obviado incluir mas informacion, como por ejemplo pueda ser el nombre de cada planeta por no recargar la &quot;pelicula&quot;.</p>
          <p>Como se comento anteriormente nos hemos valido de unas clases escritas para la Universidad de Cantabria, se puede encontrar mas informacion en el siguiente <a href="http://www.ctr.unican.es/Fundamentos/">enlace</a>. Resaltar una vez mas lo facil que nos ha resultado pintar el camino utilizando esta libreria.<br>
          </p>
          </td>
        </tr>  
      </table>
	<td width="119">&nbsp;</td>
  </tr>

 <tr>
    <td width="40">&nbsp;</td>
    <td width="110">&nbsp;</td>
    <td width="494">&nbsp;</td>
	<td width="119">&nbsp;</td>
  </tr>
</table>
</body>
</html>
